<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      const p = new Promise((resolve, reject) => {
        resolve("ok")
      })
    
     p.then(value=>{
        console.log(value);
        console.log("1");
       return new Promise((resolve)=>{
            resolve('diyi')
        })
      }).then(value=>{
        console.log(value); //diyi
        console.log("2");
      }).then(value=>{
        console.log(value);//undefiend
        console.log("3");
      }).then(value=>{
        console.log(value);
        // console.log("4");
        return 4
      }).then(value=>{
        console.log(value);
        console.log("5");
        return new Promise(()=>{}) //终止promise链条
      }).then(value=>{
        console.log(value);
        console.log("6");
      })
       
      console.log("-------------------------------------");


    //   promise 的all方法是所有promise成功结果才是成功的 有一个失败结果就是失败
    //  promise 的any方法只有一个成功就是成功
    // promise 的race方法  就是谁先到改变pending状态就是结果  这个结果是看改变pending状态的的状态
        //  reject 方法就是失败
         let p1=new Promise((resolve)=>{
            resolve('ok')
         })

         let p2=new Promise((resolve)=>{
            resolve('o0k')
         })
         let p3=new Promise((resolve,reject)=>{
            // reject('oook')
            resolve("000k")
         })
          p4=Promise.all([p1,p2,p3])
          console.log(p4);





    // 如果reject回调函数没有值就返回一个成功的回调  ，结果为undefiend
                    //   如果有值且返回的不是promise对象 就返回值
          let pc=new Promise((resolve,reject)=>{
                   reject()   //没有值就返回一个成功的回调  ，结果为undefied
            // reject("11")    //如果有值且返回的不是promise对象 就返回值
          })
          const ca=pc.catch((res)=>{
            // return res
            return new Promise((resolve,reject)=>{
                  resolve("ok")
                //   reject("22")
               })
          })
          console.log("catch",ca);





          

         function a(){
             return new Promise ((resolve)=>{
                 resolve()
                 console.log("我是A");
             })
          }

          function c(){
            console.log("我是c");
          }

        //     a().then(value=>{
        //       console.log("valuse",value);
        //     })
        function d(){
            console.log("我是d");
          }
          function f(){
            console.log("我是f");
          }

      async function b(){
             await a()
                   c()
            await  d()
                   f()
        }
        b()





        let blockTypes = ["red", "green", "blue", "yellow", "purple"];

        for (const i of blockTypes) { 
              console.log(i);
        }


        await as()
        console.log('a');
        //  等同于下面 
        new Promise((resolve, reject) => {
          as()  
        }).then(()=>{
        console.log('a');
        })
         
    </script>
  </body>
</html>
